今天介紹 defer, 這是Golang引進的新指令,C是沒有的.
先看以下的範例.
// hello28
package main
import (
"fmt"
)
func main() {
defer Function3()
Function1()
}
func Function1() {
fmt.Println("Function1 開始")
defer Function2()
fmt.Println("Function1 結束")
}
func Function2() {
fmt.Println("Function 2")
}
func Function3() {
fmt.Println("Function 3")
}
執行結果:
$ ./hello28
Function1 開始
Function1 結束
Function 2
Function 3
說明一下: 在Main()中,雖然先呼叫 Function3(), 但是前面有加defer,
所以會延遲執行,當要離開Main()的時候,才會執行.
在Function1(),也是用defer的方式,呼叫Function2(),也一樣延遲執行,當要離開Function1()的時候,才會執行.
所以最終的執行順序,就會像上面的結果.
在後面介紹到檔案操作時,還會看到defer, 一般程式語言的方式,
要記得最後補上close(), 資深的人員,會在寫open()時,就馬上寫一個
close(),然後將操作過程寫在兩者之間,以避免漏關檔案,但這樣的方式
,畢竟還是會有失誤的機會.
而Golang引進defer的方式,我們可以在寫open()之後,馬上寫
defer close(), 接著寫操作,也不用擔心,修修改改時,把close()誤刪了.